#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
int n,cnt,fk;
const double eps=1e-8;
double a[1000005],b[1000005],ans=1e18,st;
bool v[1000005],flag;
struct ok{
    double x,y,z;
}c[1000005];
struct node{
    double x,y;
    bool operator < (const node &A) const{
        return y<A.y;
    }
}A[1005];
inline double dis(double x,double y,double z,double X,double Y,double Z){
    return sqrt((x-X)*(x-X)+(y-Y)*(y-Y)+(z-Z)*(z-Z));
}
inline double js(double x,double y,double z){
    double mx=0;
    for(int i=1;i<=cnt;i++) mx=max(mx,dis(x,y,z,c[i].x,c[i].y,c[i].z));
    return mx;
}
inline void sa(){
    double l=0,r=n,mid,mmid,tnt=1e18;
    while((l+eps)<=r){
        mid=l+(r-l)/3.0;
        mmid=r-(r-l)/3.0;
        double w1=js(0,mid,0),w2=js(0,mmid,0);
        tnt=min(tnt,min(w1,w2));
        if(w1<=w2) r=mmid;
        else l=mid;
    }
    ans=min(ans,tnt);
}
inline void dfs(int k,int g){
    if(k<=(fk+1)){
        cnt=0;int o=0,t1;
        for(int i=1;i<=n;i++) if(v[i]) t1=max(t1,i);
        for(int i=1;i<=n;i++){
            if(!v[i]){
                double w=A[i].x/2.0;
                o++;
                c[++cnt]=(ok){w,(double)o-1,A[i].y};
                c[++cnt]=(ok){-w,(double)o-1,A[i].y};
                if(t1==i){
                    c[++cnt]=(ok){w,(double)o,A[i].y};
                    c[++cnt]=(ok){-w,(double)o,A[i].y};
                }    
            }
        }
        for(int i=n;i>=1;i--){
            if(v[i]){
                o++;
                double w=A[i].x/2.0;
                c[++cnt]=(ok){w,(double)o,A[i].y};
                c[++cnt]=(ok){-w,(double)o,A[i].y};
            }
        }
        sa();
        if((((double)clock()-st)/1000.0)>=0.8) flag=1;
        if(flag) return;
        if(k==(fk+1)) return;
    }
    for(int i=g;i<=n;i++){
        v[i]=1;
        dfs(k+1,i+1);
        if(flag) return;
        v[i]=0;
    }
}
signed main(){
    freopen("temple.in","r",stdin);
    freopen("temple.out","w",stdout);
    st=clock();
    cin>>n;
    fk=n/2;
    for(int i=1;i<=n;i++){
        cin>>a[i]>>b[i];
        A[i].x=max(a[i],b[i]);
        A[i].y=min(a[i],b[i]);
    }
    sort(A+1,A+1+n);
    dfs(1,1);
    cout<<fixed<<setprecision(8)<<ans;
    return 0;
}
/*
3
2.0000 4.0000
4.0000 2.0000
2.0000 2.0000

*/